home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #11 / Amiga Plus CD - 2002 - No. 11.iso / Tools / Development / PowerD / powerd / examples / split.d < prev    next >
Text File  |  2002-10-28  |  1KB  |  50 lines

  1. MODULE    'exec/memory'
  2.  
  3. ENUM    SOURCE,LENGTH
  4.  
  5. BYTE '\0\0$VER:split v1.0 by Martin Kuchinka (17.6.2001)\0\0'
  6.  
  7. PROC main()
  8.     DEF    ra=NIL,args=[NIL,NIL,NIL]:L
  9.     DEF    length,total
  10.     DEF    ifile,mem=NIL
  11.     DEF    done=0,rel,oname[256]:CHAR,count=0,ofile=NIL
  12.  
  13.     // get all the needed stuff
  14.     IFN ra:=ReadArgs('SOURCE/A,LENGTH/N',args,NIL) THEN Raise("DOS")
  15.     length:=IF args[LENGTH] THEN Long(args[LENGTH]) ELSE 800000
  16.  
  17.     // get length of the file to be splitted
  18.     IF (total:=FileLength(args[SOURCE]))<=0 THEN Raise("DOS")
  19.  
  20.     // open the input file
  21.     IFN ifile:=Open(args[SOURCE],OLDFILE) THEN Raise("DOS")
  22.  
  23.     // get needed memory chunk
  24.     IFN mem:=AllocVec(length,MEMF_PUBLIC) THEN Raise("MEM")
  25.  
  26.     WHILE done<total
  27.         StringF(oname,'\s.\z\d[2]',args[SOURCE],count)
  28.         IFN ofile:=Open(oname,NEWFILE) THEN Raise("DOS")
  29.  
  30.         rel:=Read(ifile,mem,length)
  31.         done+=rel
  32.         Write(ofile,mem,rel)
  33.  
  34.         Close(ofile);    ofile:=NIL
  35.         IF CtrlC() THEN Raise("^C")
  36.         count++
  37.     ENDWHILE
  38.  
  39. EXCEPTDO
  40.     IF ofile THEN Close(ofile)
  41.     IF ifile THEN Close(ifile)
  42.     IF mem THEN FreeVec(mem)
  43.     IF ra THEN FreeArgs(ra)
  44.     SELECT exception
  45.     CASE "DOS";    PrintFault(IOErr(),'split')
  46.     CASE "^C";    PrintF('\s: ***break\n','split')
  47.     CASE "MEM";    PrintF('\s: not enough memory\n','split')
  48.     ENDSELECT
  49. ENDPROC
  50.